package com.bjpowernode;

import com.bjpowernode.service.HelloService;
import com.bjpowernode.service.impl.Hello2ServiceImpl;
import com.bjpowernode.service.impl.HelloServiceImpl;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

public class TestApp {
    public static void main(String[] args) throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
        /*HelloService helloService=new HelloServiceImpl();
        helloService.sayHello("小王");*/

        //使用反射机制执行sayHello方法，核心method(类中的方法)
        HelloService target=new HelloServiceImpl();
        //获取sayHello名称对于的Method类对象
        Method method=HelloService.class.getMethod("sayHello", String.class);
        //通过Method 可以执行sayHello方法调用
        /***
         * invoke 是Method类中的一个方法，表示执行方法的调用
         * 参数：
         * 1、Object,表示对象的，要执行这个对象的方法
         * 2、Object... args，方法执行时的参数值
         * 返回值：Object:方法执行后的返回值
         */
        //表达的意思是：执行target对象的method 对应方法，参数是 小涵涵
       Object object= method.invoke(target,"小涵涵");

        //使用反射机制执行sayHello方法，核心method(类中的方法)
        HelloService target2=new Hello2ServiceImpl();
        //获取sayHello名称对于的Method类对象
        Method method2=HelloService.class.getMethod("sayHello", String.class);
        //通过Method 可以执行sayHello方法调用
        /***
         * invoke 是Method类中的一个方法，表示执行方法的调用
         * 参数：
         * 1、Object,表示对象的，要执行这个对象的方法
         * 2、Object... args，方法执行时的参数值
         * 返回值：Object:方法执行后的返回值
         */
        //表达的意思是：执行target对象的method 对应方法，参数是 小涵涵
       Object object2= method2.invoke(target2,"小涵涵");

    }
}
